Postgresql 安全管理 HASH函数

1 背景知识

主要介绍常用的Hash函数。

2 digest

2.1 digest 语法定义

digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea

2.2 digest 示例语句

select md5('123');
 202cb962ac59075b964b07152d234b70
select digest('123','md5');
 \x202cb962ac59075b964b07152d234b70
select pg_typeof(md5('123'));
 text
select pg_typeof(digest('123','md5'));
 bytea

3 crypt

3.1 crypt 语法定义

1、crypt 将指定密码加密为某种密文。
2、crypt 函数需要指定衣一个 salt
3、salt 由 gen_salt 函数生成。

传入参数 说明
password 传入明文密码。
salt 传入 salt

1、gen_salt 可以为crypt()的使用生成一个新的随机salt字符串。
2、gen_salt 可以为crypt()指定加密算法。
3、iter_count 为密码重复加密的次数。
3、type 参数指定散列算法。接受的类型有以下几种:

算法 最大口令长度 自适应? salt 位数 描述
bf 72 yes 128 基于Blowfish,2a的变体
md5 unlimited no 48 基于MD5加密
xdes 8 yes 24 扩展的DES
des 8 no 12 原始的UNIX 加密
crypt(password text, salt text) returns text
gen_salt(type text [, iter_count integer ]) returns text

3.2 crypt 函数示例

1、使用 gen_salt 函数生成加密一览。

select gen_salt('md5');    --$1开头
 $1$2XW7Fu8z
select gen_salt('bf');        --$2a开头,后面记录了循环次数
 $2a$06$fNQCsIQ/FNlXXhT00xj71u
select gen_salt('des');      --2位字符串
 uG
select gen_salt('xdes');    --下划线开头,点点前面的字符串跟循环次数有关
 _J9..clye


2、使用 crypt 函数加密口令。

select crypt('1234','_J9..clye');
 _J9..clye5LJgMRldROE
select crypt('1234',gen_salt('bf',15));
$2a$15$jjYhJPqzU3pe5BnzsHj.W.k1QQZH1g3ulyzQStLFrcP4D6/u..PL.